Distributed fault tolerant service chain

ABSTRACT

Some embodiments of the invention provide novel methods for performing services on data messages passing through a network connecting one or more datacenters, such as software defined datacenters (SDDCs). The method of some embodiments uses service containers executing on host computers to perform different chains (e.g., ordered sequences) of services on different data message flows. For a data message of a particular data message flow that is received or generated at a host computer, the method in some embodiments uses a service classifier executing on the host computer to identify a service chain that specifies several services to perform on the data message. For each service in the identified service chain, the service classifier identifies a service container for performing the service. The service classifier then forwards the data message to a service forwarding element to forward the data message through the service containers identified for the identified service chain. The service classifier and service forwarding element are implemented in some embodiments as processes that are defined as hooks in the virtual interface endpoints (e.g., virtual Ethernet ports) of the host computer&#39;s operating system (e.g., Linux operating system) over which the service containers execute.

Datacenters today use a static, configuration intensive way todistribute data messages between different application layers and todifferent service layers. A common approach today is to configure thevirtual machines to send packets to virtual IP addresses, and thenconfigure the forwarding elements and load balancers in the datacenterwith forwarding rules that direct them to forward VIP addressed packetsto appropriate application and/or service layers. Another problem withexisting message distribution schemes is that today's load balancersoften are chokepoints for the distributed traffic. Accordingly, there isa need in the art for a new approach to seamlessly distribute datamessages in the datacenter between different application and/or servicelayers. Ideally, this new approach would allow the distribution schemeto be easily modified without reconfiguring the servers that transmitthe data messages.

BRIEF SUMMARY

Some embodiments of the invention provide novel methods for performingservices on data messages passing through a network connecting one ormore datacenters, such as software defined datacenters (SDDCs). Themethod of some embodiments uses service containers executing on hostcomputers to perform different chains (e.g., ordered sequences) ofservices on different data message flows. For a data message of aparticular data message flow that is received or generated at a hostcomputer, the method in some embodiments uses a service classifierexecuting on the host computer to identify a service chain thatspecifies several services to perform on the data message.

For each service in the identified service chain, the service classifieridentifies a service node for performing the service. Some or all of theservice nodes in a service chain are service containers in someembodiments. The service classifier then forwards the data message to aservice forwarding element to forward the data message through theservice nodes identified for the identified service chain. As furtherdescribed below, the service classifier and service forwarding elementare implemented in some embodiments as processes that are defined ashooks in the virtual interface endpoints (e.g., virtual Ethernet ports)of the host computer's operating system (e.g., Linux operating system)over which the service containers execute.

For the particular data message flow, the service classifier in someembodiments identifies a service container for at least one service inthe identified service chain by performing load balancing operations toselect particular service containers from a set of two or more candidateservice containers for the service. In some embodiments, the serviceclassifier performs this load balancing operation to select one servicecontainer from multiple candidate service containers for two or more(e.g., all) of the services in the identified service chain.

For a particular service, the service classifier in some embodimentsperforms the load balancing operation by directing a load balancer thatis specified for the particular service to select a container from theset of candidate service containers for the particular service. In someembodiments, the load balancing operation uses statistics regarding datamessages processed by each container in the candidate container set toselect one particular container from the set for the particular datamessage flow.

For the particular data message flow, the service classifier in someembodiments specifies a service path identifier (SPI) that identifies apath through the containers selected for implementing the identifiedservice chain, and provides this service path identifier to the serviceforwarding element to use to perform its classification operations forforwarding the data messages of this flow. In other embodiments, theservice forwarding element does not use the service path identifier forforwarding the data messages of the particular data message flow, butuses MAC redirect for specifying forwarding rules for directing the datamessages of this flow between successive service containers in theservice path.

Conjunctively with either of these forwarding approaches, someembodiments use the specified service path identifier to select theservice path for a reverse data message flow that is sent in response tothe particular data message flow (e.g., by the destination of theparticular data message flow). This approach ensures that in theseembodiments the same set of service containers examine both the initialdata message flow in the forward direction and the responsive datamessage flow in the reverse direction.

In some of the embodiments that use the MAC redirect approach forforwarding data messages to different service containers in the servicepath, the service forwarding element is implemented (1) by the virtualinterface endpoints in the OS namespace that is used to define a virtualforwarding element (e.g., virtual switch or virtual bridge) in the OS,and (2) by a virtual interface endpoint in a container namespace of eachservice container. These virtual interface endpoints are configured toperform match-action forwarding operations needed for implementing theMAC redirect forwarding.

In some embodiments, these match-action operations include matchclassification operations that compare layer 2 (L2) source and/ordestination network address of the data message and layer 3 (L3) sourceand/or destination network address of the data message with selectioncriteria of forwarding rules. The L3 source and/or destination networkaddresses are used in some embodiments to differentiate egress datamessages exiting a subnet from ingress data messages entering a subnet.In some embodiments, the match-action operations include actionoperations that modify the L2 destination MAC address of the datamessages as these embodiments use MAC redirect to forward the datamessages to successive service containers.

In some embodiments, a datacenter has (1) several service host computersthat execute sets of service containers for performing the same servicechain on data message flows received at the datacenter, and (2) a set ofone or more forwarding elements (e.g., front end load balancers) thatrandomly or deterministically distribute data message flows to thesehost computers. Each service host computer then performs a serviceclassification operation on each data message flow that it receives todetermine whether it should process the data message flow, or it shouldredirect the data message flow to another service host computer.

For instance, upon receiving a first data message flow, a first servicehost computer uses the flow's attribute set (e.g., the flow's five tupleidentifier) to perform a first service classification operation thatidentifies a first set of services to perform on the data message. Basedon an identifier for the first set of services, the first service hostcomputer determines that a set of service machines executing on a secondhost has to perform the first set of services on the first data messageflow. It then forwards data messages of the first data message flow tothe second service host computer.

On the other hand, upon receiving a second data message flow, a firstservice host computer uses the flow's attribute set (e.g., flow's fivetuple identifier) to perform a second service classification operationthat identifies a second set of services to perform on the data message.Based on an identifier for the second set of services, the first servicehost computer determines that a set of service machines executing on thefirst service host computer has to perform the second set of services onthe second data message flow. It then forwards the data message of thesecond data message flow to each service machine in the set of servicemachines on the first service host computer that has to perform aservice in the second set of services on the second data message flow.

The preceding Summary is intended to serve as a brief introduction tosome embodiments of the invention. It is not meant to be an introductionor overview of all inventive subject matter disclosed in this document.The Detailed Description that follows and the Drawings that are referredto in the Detailed Description will further describe the embodimentsdescribed in the Summary as well as other embodiments. Accordingly, tounderstand all the embodiments described by this document, a full reviewof the Summary, the Detailed Description, the Drawings, and the Claimsis needed. Moreover, the claimed subject matters are not to be limitedby the illustrative details in the Summary, the Detailed Description,and the Drawings.

BRIEF DESCRIPTION OF FIGURES

The novel features of the invention are set forth in the appendedclaims. However, for purposes of explanation, several embodiments of theinvention are set forth in the following figures.

FIG. 1 illustrates a software defined datacenter (SDDC) that uses theservice-performance methods of some embodiments to process data messagesoriginating from, and/or received at, the SDDC.

FIG. 2 illustrates how some embodiments implement the service forwardingelement and the service classifier within a Linux operating system (OS)of a host computer.

FIG. 3 illustrates a process that the service classifier performs insome embodiments.

FIG. 4 illustrates the service classifier of some embodimentsinteracting with several other modules to perform serviceclassification.

FIG. 5 presents a process that conceptually illustrates the operation ofthe service forwarding element in forwarding a data message through aservice path identified by the service classifier.

FIG. 6 illustrates that upon receiving a first data message flow, avirtual interface endpoint of the Linux OS of a first service hostcomputer passes the data message to a service classifier that hasregistered as a hook in a callback mechanism of the OS.

FIG. 7 illustrates the processing of the second data message flow, whicha top of rack switch initially forwards to the first service hostcomputer.

FIG. 8 illustrates a process that a service host computer performs insome embodiments, in order to perform service operations on a receiveddata message flow, or to redirect the data message to another servicehost computer for service processing.

FIG. 9 further illustrates the distributed service chain classificationand forwarding architecture of FIGS. 6 and 7.

FIG. 10 conceptually illustrates a computer system with which someembodiments of the invention are implemented.

DETAILED DESCRIPTION

In the following detailed description of the invention, numerousdetails, examples, and embodiments of the invention are set forth anddescribed. However, it will be clear and apparent to one skilled in theart that the invention is not limited to the embodiments set forth andthat the invention may be practiced without some of the specific detailsand examples discussed.

Some embodiments of the invention provide novel methods for performingservices on data messages passing through a network connecting machinesin one or more datacenters, such as software defined datacenters(SDDCs). The method of some embodiments uses service containersexecuting on host computers to perform different chains of services ondifferent data message flows. Service chains include one or more servicenodes, each of which performs a service in the service chain. In someembodiments, some or all of the service nodes are service containers.

Containers in some embodiments are constructs that run on top of anoperating system (OS) of a host computer. In some embodiments, the hostoperating system uses name spaces to isolate the containers from eachother and therefore provides operating-system level segregation of thedifferent groups of applications that operate within differentcontainers. Examples of containers include Docker containers, rktcontainers, and containers executing on top of hypervisors, such asESXi.

As used in this document, data messages refer to a collection of bits ina particular format sent across a network. One of ordinary skill in theart will recognize that the term data message may be used herein torefer to various formatted collections of bits that may be sent across anetwork, such as Ethernet frames, IP packets, TCP segments, UDPdatagrams, etc. Also, as used in this document, references to L2, L3,L4, and L7 layers (or layer 2, layer 3, layer 4, layer 7) are referencesrespectively to the second data link layer, the third network layer, thefourth transport layer, and the seventh application layer of the OSI(Open System Interconnection) layer model.

FIG. 1 illustrates an SDDC 100 that uses the service-performance methodsof some embodiments to process data messages originating from, and/orreceived at, the SDDC. In some embodiments, the SDDC is part of atelecommunication network (e.g., a 5G telecommunication network) forwhich multiple network slices can be defined. A data message flow can beassociated with a network slice, and one or more service chains can bedefined for each network slice. Each service chain in some embodimentsspecifies one or more ordered sequence of service operations (e.g.,compute operations, forwarding operations, and/or middlebox serviceoperations, etc.) to perform on the data message flows associated withthe chain's network slice.

In a 5G telecommunication network, the service operations includevirtual network functions (VNFs) that are performed on the datamessages. Examples of network slices for a 5G telecommunication networkinclude a mobile broadband slice for processing broadband data, an IoT(Internet of Things) slice for processing IoT data, a telemetry slicefor processing telemetry data, a VOIP (voice over IP) slice for voiceover IP data, a video conferencing slice for processing videoconferencing data, a device navigation slice for processing navigationdata, etc.

As shown, the SDDC 100 includes host computers 105, managing servers110, ingress gateways 115, and egress gateways 120. The ingress/egressgateways 115 and 120 allow data messages to enter and exit thedatacenter. In some embodiments, the same set of gateways can act asingress and egress gateways, as they connect the SDDC to an externalnetwork, such as the Internet. In other embodiments, the ingress andegress gateways are different as the ingress gateways connect the SDDCto one network (e.g., a private telecommunication network) while theegress gateways connect the SDDC to another network (e.g., to theInternet). Also, in some embodiments, one or both of these sets ofgateways (e.g., the ingress gateways or the egress gateways) connect totwo or more networks (e.g., an MPLS network and the Internet).

As further shown, the host computers execute operating systems 130,service containers 135 and software forwarding elements 140. Theoperating system (OS) 130 in some embodiments is Linux. This OS executeson top of a hypervisor in some embodiments, while it executes natively(without a hypervisor) over the host computer in other embodiments. Theservice containers 135 and the software forwarding elements 140 aredeployed and configured by the managing servers 110 to implement chainsof service operations.

The managing servers 110 in some embodiments include managers throughwhich service chains can be defined and managed, and controllers throughwhich the service containers 135 and the software forwarding elements140 can be configured. In other embodiments, a common set of serversperforms both the management and control operations. To operate servicechains, the managing servers 110 in some embodiments configure each hostcomputer 105 and its software forwarding element to implement a serviceclassifier 155 and a service forwarding element 160.

For a data message of a particular data message flow that is received ata host computer, the service classifier 155 executing on the hostcomputer 105 identifies a service chain that specifies several servicesto perform on the data message. The received data message in some casesoriginate from a source machine executing on the host computer, while inother embodiments was forwarded by a forwarding element (e.g., front endload balancer) operating outside of the host computer.

For each service in the identified service chain, the service classifier155 identifies a service container 135 to perform the service. In someembodiments, the service classifier 155 of one host computer identifiesall service containers for a service chain to be on its host computer.In other embodiments, the service classifier can select servicecontainers on different hosts to perform some or all of the serviceoperation of the identified service chain. The set of service containersthat are identified for implementing a service chain represent a servicepath through the network.

After identifying the service chain and the service containers toimplement the service chain (e.g., after identifying the service path),the service classifier 155 passes the data message to the serviceforwarding element 160 to forward the data message to the servicecontainers identified for the identified service chain. In someembodiments, the service forwarding element 160 executes on the serviceclassifier's host computer. In other embodiments where the servicecontainers of the identified service path can be on different hostcomputers, the service forwarding element 160 is a distributedforwarding element (e.g., a logical forwarding element) that spans themultiple hosts that execute the service containers of the service path.

In some embodiments, the service forwarding element 160 performsL2-match operations with L2 MAC redirect action operations to forwarddata messages to different service containers in the service path. Inother embodiments, the service forwarding element uses service pathidentifiers (that identify the service paths) to perform its matchoperations, as further described below.

FIG. 1 illustrates the service classifier 155 selecting two differentservice paths 142 and 144 for two different data message flows 146 and148, and the service forwarding element 160 forwarding these datamessage flows along the service containers in each path. The serviceforwarding element forwards the data message flow 146 along servicecontainers SC1, SC2 and SC3 for service path 142, while forwarding thedata message flow 148 along the service containers SC4 and SC5 forservice path 144. The service forwarding element then forwards both ofthese data message flows out of the SDDC 100. Once a data message isprocessed by the service containers of a service chain, a serviceforwarding element in some embodiments can also forward the data messageto another host computer or another machine, application or middleboxservice operating on the same host computer or different host computerin the SDDC.

FIG. 2 illustrates how some embodiments implement the service forwardingelement and the service classifier within a Linux OS 230 of a hostcomputer. As shown, a service classifier 155 in some embodiments isimplemented as a hook function in an ingress-side virtual interfaceendpoint 204 (e.g., Ethernet port) of the Linux OS 230. This port 204 insome embodiments serves as an interface with a network interfacecontroller (NIC) of the host computer. In some embodiments, the serviceforwarding element 160 is implemented in part by a Linux bridge 240inside its root namespace 215, and in other part by hook functions inthe virtual interface endpoints 206 (e.g., Ethernet ports) of theservice containers 235 and in the virtual interface endpoints 208defined in the Linux namespace.

FIG. 3 illustrates a process 300 that the service classifier 155performs in some embodiments. The classifier performs this process eachtime it receives a data message. To perform this process, the serviceclassifier 155 interacts with several other modules executing on itshost computer. As shown in FIG. 4, these other modules in someembodiments include container selectors 404 and SPI generator 406.

As shown, the process 300 starts (at 305) when the service classifier155 receives a data message for processing. At 310, the serviceclassifier 155 determines whether it has previously processed anotherdata message that is in the same flow as the received data message. Ifso, it transitions to 330 to pass the received data message to a firstservice container that is identified by a record that the serviceclassifier previously created and stored for the processed flow in aconnection tracker 410, as further described below.

In some embodiments, the record that was previously created in theconnection tracker might be for a related flow in the reverse direction.Specifically, in some embodiments, the record that the serviceclassifier creates for a first data message flow in a first direction(e.g., a flow exiting the SDDC) is used by the service classifier toprocess a second data message flow in a second direction (e.g., a flowentering the SDDC) that is received in response to the first datamessage flow, as further described below.

The service classifier does this in order to use the same service path(e.g., the same set of service containers) to process the reverse secondflow as it did for the initial first flow. In these embodiments, theconnection tracker record is for a bi-directional flow, instead of justbeing for a unidirectional flow. In other embodiments, the serviceclassifier creates two records when processing the first data messageflow, one for the forward direction and the other for the reversedirection, as the connection-tracker records in the forward and reversedirections are related but not identical.

When the service classifier 155 determines (at 310) that it has notpreviously processed another data message in the same flow as thereceived data message, it uses (at 315) the received data message'sattribute set (e.g., its header values) to perform a classificationoperation to identify a service chain identifier for a service chainthat has to be performed on the data message's flow. In someembodiments, the data message's attribute set that is used for theclassification match operation is the data message flow's five tupleidentifier (e.g., source and destination IP, source and destinationport, and protocol), or its seven tuple identifier (i.e., its five tupleidentifier plus source and destination MAC addresses).

FIG. 4 shows the service classifier 155 performing its serviceclassification operation by referring to service classification rules450 that are stored in classification rule storage 455. As shown, eachclassification rule includes a match tuple 457 and an action tuple 459.The match tuple includes one or more header values (e.g., five or seventuple identifiers), while the action tuple 459 includes a service chainidentifier (SCI).

After matching a data message's attribute set with the match tuple 457of a service classification rule 450, the service container 155 (at 320)retrieves the SCI from the matching service classification rule's actiontuple 459 and uses the retrieved SCI to identify a record 465 in an SCIattribute storage 460. Each record 465 in the SCI attribute storagecorrelates an SCI with an ordered list of services 444 of the servicechain identified by the SCI, and a list 446 of container selectors 404for selecting the containers to perform the services in the chain.

At 320, the service classifier 155 in some embodiments selects a servicecontainer for each service specified in the identified SCI record 465 inthe storage 460, by using the container selector 404 specified for theservice in the identified SCI record. When multiple candidate servicecontainers exist for performing one service, the specified containerselector for that service in some embodiments performs a load balancingoperation to select one particular candidate service container for thereceived data message's flow.

In some embodiments, such a load balancing operation uses statistics(stored in container statistics storage 424) regarding data messagesprocessed by each candidate service container to select the particularservice container. As further described below, the service classifierupdates the statistics for the containers associated with a service patheach time that it processes a data message. In some embodiments, theload balancing operations of the container selectors are designed todistribute the data message load evenly across the candidate servicecontainers, or unevenly based on a weighted distribution scheme.

Also, in some embodiments, the container selectors for differentservices in a service chain work in conjunction to select the containersin a service path, e.g., in embodiments where selection of a firstservice container for a first service in the service path necessitatesthe selection of a second service container for a second service in theservice path. Such is the case in some embodiments when one servicecontainer cannot be part of two different service paths (i.e., when twoservice paths cannot overlap).

Some embodiments group the containers into pods, with each podcomprising one or more service containers that are guaranteed to beco-located on the same host computer. Each pod in some embodiments isimplemented by one virtual machine. In some embodiments, two or more ofthe service containers for a service path (e.g., all the servicecontainers for the service path) are in the same pod, and two or morepods are candidates for implementing the same service chain. In some ofthese embodiments, the container selector 404 is a load-balancing podselector that selects one pod from several pods that are candidates forimplementing the service path of a service chain identified by theservice classifier 155.

Next, at 325, the service classifier generates a SPI for the servicepath specified by the containers selected at 320, and stores thegenerated SPI in the connection tracker 410 for the received datamessage's flow identifier (e.g., its five or seven tuple identifier). Togenerate the SPI, the service classifier uses the SPI generator 406. Insome embodiments, the SPI generator 406 uses a set of rules to definethe SPI for a service path based on the identifiers associated with thecontainers selected at 320. For instance, the SPI is defined in someembodiments to be a concatenation of the UUID (universally unique ID) ofthe service path containers. In some embodiments, the UUIDs areconcatenated in the order of the service containers in the service path.

The service classifier stores (at 325) the generated SPI in theconnection tracker 410 for the received data message's flow identifierso that it can later use this SPI to identify the service path (in theSPI attribute storage 415) for a subsequent data message in the sameflow as the currently processed data message. To do this, the serviceclassifier would match the subsequent data message's flow ID (e.g., itsfive or seven tuple identifier) with the flow ID in a match tuple 492 ofa record 494 in the connection tracker 410, and then retrieve the SPIspecified by the action tuple 496 of the record with the matching flowID.

As mentioned above, the service classifier in some embodiments uses theSPI record in the connection tracker 410 to process data messages of aflow that is in response to the flow of the currently processed datamessage. In some embodiments, the service classifier uses the same SPIrecord for the forward flow and reverse flow. In other embodiments, theservice classifier creates separate connection tracker flows for theforward and reverse flows. Some embodiments use the same SPI for thereverse flow in order to ensure that the same set of service containersexamine both the initial data message flow in the forward direction andthe responsive data message flow in the reverse direction.

After storing the record(s) in the connection tracker 410, the serviceclassifier transitions to 330. The process also transitions to 330 from310 when it determines that it has previously processed the receiveddata message's flow, identifies the SPI for this flow from theconnection tracker and then uses this SPI to identify the servicecontainers in the service path for the data message.

At 330, the service classifier passes the data message to the serviceforwarding element to forward to the first service container. In someembodiments, the service classifier provides the specified service pathidentifier to the service forwarding element to use to perform itsclassification operations for forwarding the data messages of this flow.In other embodiments, the service forwarding element does not use theservice path identifier for forwarding the data messages of theparticular data message flow, but rather uses a MAC redirect approach.

In some embodiments, the service classifier specifies the data message'sdestination MAC address as the MAC address of the first servicecontainer and provides this data message to service forwarding elementto forward to the first service container. In other embodiments, theservice classifier specified the data message's destination MAC as a MACaddress associated with the service forwarding element, which uses thedata message's source MAC address to perform its service forwardingoperation, as further described below. In some of these embodiments, theservice classifier specifies the source MAC address as a MAC addressassociated with the start of a particular service path to allow theservice forwarding element to identify the first service container forthe service path.

After 330, the service classifier increments statistics of the servicecontainers in the identified service path. As mentioned above, theservice classifier maintains these statistics in the statistic storage424. Different statistics are maintained in different embodiments.Examples of such statistics include number of data messages, number ofbytes in the forwarded payload bytes, etc. Hence, in some embodiments,the service classifier increments the statistics by incrementing eachservice container's message count by one, and/or adding the processedmessage's payload size to the byte count of each service container inthe service path. After 330, the process 300 ends.

FIG. 5 presents a process 500 that conceptually illustrates theoperation of the service forwarding element 160 in forwarding a datamessage through a service path identified by the service classifier 155.This forwarding operation uses MAC redirect and is implemented in partby a Linux bridge 240 inside its root namespace 215, and in other partby hook functions in the virtual interface endpoints (e.g., Ethernetports 206) of the service containers and in the virtual interfaceendpoints (e.g., Ethernet ports 208) defined in the Linux namespace.These virtual interface endpoints are configured to perform match-actionforwarding operations needed for implementing the MAC redirectforwarding.

As shown, the process 500 starts (at 505) when it receives a datamessage for forwarding through the service path. Next, at 510, theprocess performs a classification operation to identify the virtualinterface endpoint of the Linux bridge associated the first servicenode. As mentioned above, the service classifier in some embodimentsdefines this destination MAC to be the destination MAC of the virtualinterface endpoint connected to the first service container. In some ofthese embodiments, the classification operation (at 510) compares thedata message's destination MAC with the match criteria of forwardingrules in a lookup table that associates different destination MACaddress with different virtual interface endpoint identifiers. Underthis approach, the process retrieves the identifier for the next hopvirtual interface endpoint from the forwarding rule that has the datamessage's destination MAC as its match criteria.

In other embodiments, the process 500 performs the classificationoperation differently. For instance, in some embodiments, the process500 uses the below-described three classification operations 525-535,which first identify the direction of the service flow, then use thesource MAC of the data message to identify the destination MAC of thefirst service node, and lastly use the identified destination MAC toidentify the virtual interface endpoint. In some of these embodiments,the service classifier does not set the data message's destination MACaddress to be the MAC address of the first service node, but insteadsets this address to be the destination MAC address of the bridge.

Next, at 515, the process forwards the data message to the next servicecontainer through the identified virtual interface endpoint. The servicecontainer performs its service operation (e.g., middlebox serviceoperation, etc.) on the data message, and then provides (at 520) thedata message back to the service forwarding element. In someembodiments, the service container 235, its associated Ethernet port206, or the associated bridge interface endpoint 208 changes the sourceMAC address of the data message to be a MAC address associated with theservice container (e.g., associated with its Ethernet port 206), as theservice forwarding element uses source MAC addresses to perform itsnext-hop service determination.

The process 500 then performs three classification operations at 525,530 and 535, which were briefly mentioned above. The firstclassification operation (at 525) compares the L3 source and/ordestination network addresses of the data message with classificationrules that are defined to differentiate egress data messages fromingress data messages. For instance, in some embodiments, oneclassification rule determines whether the data message's source L3address is in the CIDR of SDDC subnet in order to determine whether thedata message is part of an upstream flow exiting the subnet, whileanother classification rule determines the data message's destination L3address is in the CIDR of SDDC subnet in order to determine whether thedata message is part of downstream flow entering the subnet.

In some embodiments, each of these classification rules identifies adifferent lookup table for performing the second classificationoperation at 530. Hence, after identifying the direction of the datamessage's flow (upstream or downstream) in the first classificationoperation at 525, the process 500 uses the lookup table identified bythe first classification operation to perform the second lookup at 530,this time based on the current source MAC address of the data message.In some embodiments, this second classification rule matches the datamessage's current source MAC address with the match criteria (specifiedin terms of a source MAC) of one classification rule that provides inits action tuple the destination MAC of the next hop along the servicepath. The source MAC identifies the prior service node in the servicechain for the direction identified at 525 (e.g., in the table identifiedat 525), and hence can be used to identify the next service node in theservice chain.

In some embodiments, the second classification operation (at 530)changes the data message's destination MAC address to the MAC address ofthe next hop in the service path. When the service path has not beencompleted (i.e., when the last service container has not yet processedthe data message), the next hop in the service path is another servicecontainer. On the other hand, when the service path has finished (i.e.,when the last service container has processed the data message), thenext hop in the service path is an egress destination MAC that has beendefined for the service path. This egress destination MAC in someembodiments is a MAC address associated with a switch or router thatforwards the data message to another destination in the SDDC, or is aMAC address associated with a gateway that forwards the data message outof the SDDC or an SDDC subnet.

After the destination MAC of the data message is redefined at 530, theprocess performs a third classification operation (at 535) to identifythe virtual interface endpoint of the Linux bridge associated with thedata message's destination MAC. This classification operation in someembodiments compares the data message's destination MAC with the matchcriteria of forwarding rules in a lookup table that associates differentdestination MAC address with different virtual interface endpointidentifiers. Under this approach, the process retrieves the identifierfor the next hop virtual interface endpoint from the forwarding rulethat has the data message's destination MAC as its match criteria.

After 535, the process 500 determines (at 540) whether the identifiedvirtual interface endpoint identified at 535 is that of another servicecontainer. When the identified virtual interface endpoint is not anotherservice container, the service path has been completed. The operation540 in some embodiments is not actually performed by the serviceforwarding element but is included only to illustrate the end of theservice path in FIG. 5.

When the identified virtual interface endpoint identified at 535 is thatof another service container, the service path forwarding of the process500 has not finished. Hence, the process returns to 515 to forward thedata message to the next service container on the path through itsidentified virtual interface endpoint. Otherwise, the service-pathforwarding process 500 ends. As mentioned above, when the service pathfinishes, the destination MAC address that was defined in the lastiteration through 530 identifies the virtual interface endpoint of theegress port that is defined for the service path. Hence, at the end ofthe service path in these embodiments, the Linux bridge forwards thatthe data message to the virtual interface endpoint from where it will beforwarded to its next destination.

The following example by reference to the host computer of FIG. 2further illustrates the MAC-redirect forwarding of the serviceforwarding element of some embodiments. In this example, the servicepath includes the service container 235 a followed by the servicecontainer 235 b for an upstream data message on which two serviceoperations have to be performed on the data message's way out of theSDDC. When the Linux bridge 240 receives this upstream data message, thedata message has a destination MAC address of the vethx interface of thebridge, as it needs to be first processed by the service container 235a.

Hence, the bridge passes the data message to the vethx interface, whichin turn forwards it to the service container 235 a through the ethointerface 206 of this service container. The service container performsits service on the data message, and passes it back to vethx interfacethrough the etho interface. In passing the data message back to thevethx interface, the service container or its associated etho interfacespecifies the source MAC address of the data message as the source MACaddress of the etho interface.

The vethx interface then performs a first classification operation,which based on the data message's L3 source address being in the ingressCIDR, results in a determination that the data message is in an upstreamdirection. Based on this determination, the vethx interface performs asecond classification operation on an upstream lookup table that matchesthe current source MAC address with a next hop forwarding rule thatidentifies the next hop's destination MAC address. After the vethxinterface identifies the next hop address to be the MAC address of vethyinterface, the bridge provides the data message to the vethy interface.The vethy interface forwards the data message to the service container235 b through the etho interface 206 of this service container. Theservice container performs its service on the data message, and passesit back to vethy interface through the etho interface. Again, the sourceMAC address of the data message is changed to the source MAC address ofetho interface of the service container 235 b.

The vethy interface then performs a first classification operation,which based on the data message's L3 source address being in the ingressCIDR, results in a determination that the data message is in an upstreamdirection. Based on this determination, vethy interface performs asecond classification operation on am upstream lookup table that matchesthe current source MAC address with a next hop forwarding rule thatidentifies the next hop's destination MAC address. In this case, thenext hop address is that of the egress L2 address of the bridge. Hence,after the vethy interface identifies the next hop address to be theegress MAC address of the bridge, the bridge provides the data messageto its egress interface for forwarding out of the host computer.

The service forwarding element 160 uses other forwarding methods inother embodiments. For instance, in some embodiments, the serviceforwarding element use the SPI for the identified service path and acurrent hop count to perform its forwarding operations. In someembodiments, the SPI and current hop count are values that the serviceclassifier initially creates and stores on the host computer. For eachservice hop, the service forwarding element compares the SPI and thecurrent hop count with match-criteria of next hop forwarding rules,which have action tuples that provide the virtual endpoint interfaceidentifier for the virtual interface connected to the next hop. As theservice forwarding element forwards the data message through itssuccessive service hops, it adjusts (e.g., decrements) its current hopcount to correspond to the next service container position in theservice path.

In some embodiments, the service forwarding element uses theSPI/hop-count approach when the service containers execute on differenthost computers and/or execute in different datacenters. In some suchembodiments, the SPI/hop-count information is embedded in tunnel headersthat encapsulate the data messages as they are forwarded between thedifferent host computers and/or different datacenters.

As mentioned above, the SDDC 100 in some embodiments has several hostcomputers that execute sets of service containers for performing thesame service chain on data message flows received at the datacenter. Insome such embodiments, the host computers only execute servicecontainers that perform operations associated with service chains, anddo not execute any other data compute end node (i.e., any other acontainer or virtual machine that is the source or destination machinefor a data message flow). As such, these host computers will be referredto below as service host computers. In these embodiments, other hostcomputers in the SDDC 1000 execute the machines as serve as the computeend nodes.

In some embodiments, the service classification, forwarding andoperations are distributed among these service host computers todistribute the service load and to provide fault tolerance in case oneor more service host computers fail. A set of one or more frontendforwarding elements (e.g., load balancers) randomly or deterministicallydistribute data message flows to these service host computers, whichthen perform service classification operation on the data message flowsthat they receive to determine whether they should service process thedata message flows, or should redirect the data message flows to otherservice host computers for service processing.

FIGS. 6 and 7 illustrate examples of three service host computers 605,607 and 609 performing distributed service classification and forwardingoperations of some embodiments. Each of these service host computers insome embodiments executes two clusters of service containers forperforming two different services. Each cluster in this example includesmore than one container. As further described below by reference to FIG.9, the service classification and forwarding operations are distributedamong the service host computers 605, 607 and 609, so that thesecomputers implement the same service classification and forwardingoperations (e.g., process the same service classification and forwardingrules) for similar service containers that execute on them.

In the examples of FIGS. 6 and 7, a top-of-rack (TOR) switch 615 selectsthe first service host computer 605 to process two different datamessage flows, as part of a load balancing operation that it performs todistribute the load across different host computers that execute servicecontainers that perform service operations. This TOR is part of acluster of two or more TORs that perform such frontend load balancingoperations for a cluster 680 of three service host computers 605, 607and 609. These frontend load balancing operations are deterministic(e.g., are based on flow-identifier hashes and hash table lookups) insome embodiments, while being random in other embodiments.

FIG. 6 illustrates that upon receiving a first data message flow 622, avirtual interface endpoint 612 of the Linux OS 614 of the first servicehost computer 605 passes the data message to a service classifier 655that has registered as a hook in the XDP (eXpress Data Path) callbackmechanism of this OS. The service classifier 655 of the first servicehost computer 605 uses the flow's attribute set (e.g., five or seventuple identifier) to perform a first service classification operationthat identifies a first service chain that specifies a set of servicesto perform on the data message.

Based on the first service chain's identifier, the service classifier ofthe first service host computer determines that service containersexecuting on the first host computer 605 have to perform the firstservice chain's set of services on the first data message flow 622. Forinstance, in some embodiments, the service classifier computes a hashvalue from the service chain identifier and then lookups this hash valuein a hash lookup table that correlates hash ranges with differentservice host computer identifiers. Some embodiments compute the hashvalue based on the other parameters in conjunction or instead of theservice chain identifier. Examples of such other parameters includesource network address (e.g., source IP address), source port, SPI, etc.

After its hash lookup identifies the first host computer 605 as theservice host computer that should process the received data messageflow, the service classifier 655 of the first service host computer 605selects the service containers 632 and 634 on the first host computer toimplement the service path that performs the services in the identifiedservice chain. The service classifier then hands off the data messageflow 622 to the service forwarding element 642 executing on the firsthost computer 605 to sequentially forward the data messages of the firstdata message flow to the two identified service containers 632 and 634on the first host computer 605 so that these service containers canperform their service operations on these data messages. After theservice processing, the data messages are forwarded to their next hopdestination (e.g., to the destination identified by their originallayers 3 and 4 header values).

FIG. 7 illustrates the processing of the second data message flow 724,which the TOR 615 also initially forwards to the first service hostcomputer 605. Upon receiving a data message of the second data messageflow 724 at the virtual interface endpoint 612, the data message isagain forwarded to the service classifier 655, as it is registered as ahook function for this interface. The service classifier 655 then usesthe flow's attribute set (e.g., five or seven tuple identifier) toperform a second service classification operation that identifies asecond service chain that specifies a second set of services to performon the data message.

Based on the second service chain's identifier, the first host computer605 determines that service containers on the second host computer 607have to perform the second set of services on the second data messageflow 724. Again, in some embodiments, the service classifier computes ahash value from the service chain identifier and/or other parameters(such as source IP address, source port address, SPI, etc.) and thenlookups this hash value in a hash lookup table that correlates hashranges with different service host computer identifiers. The hash lookupin FIG. 7 identifies the second host computer 607 as the service hostcomputer that should process the received data message flow.

Hence, in FIG. 7, the service classifier 655 hands back the datamessages of the second flow 724 to virtual interface endpoint 612 forforwarding to the second host computer 607. Once a data message of thesecond flow is received at this virtual interface endpoint on the secondhost, it is passed to the service classifier 755 executing on this host,which then performs a classification operation to identify the secondservice chain's identifier for this data message.

Based on the second service chain's identifier (e.g., the hash of thisidentifier), the service classifier 755 on the second host computer 607determines that service containers on the second host computer 607 haveto perform the second set of services on the received data message andits flow 724. The service classifier then identifies the two servicecontainers 736 and 738 on its host that have to implement the servicepath that performs the services in the identified service chain. It thenhands off the received data message of the second flow 724 to theservice forwarding element 742 executing on the second host computer 607to sequentially forward to each of two service containers 736 and 738 onthe second host computer 607 so that these service containers canperform their service operations on these data messages. After theservice processing, the data messages are forwarded to their next hopdestination (e.g., to the destination identified by their originallayers 3 and 4 header values).

FIG. 8 illustrates a process 800 that each service host computer (e.g.,computers 605, 607 and 609) performs in some embodiments, in order toperform service operations on a received data message flow, or toredirect the data message to another service host computer for serviceprocessing. As shown, the process 800 starts (at 805) when the serviceclassifier 155 of a service host computer receives a data message forprocessing from the virtual interface endpoint 612 of its OS. Theprocess then performs (at 810) a classification operation that matchesthe received data message's attribute set (e.g., its five or seven tupleidentifier) with the match criteria of a service classification rule,and retrieves the SCI from the matching rule's action tuple.

The service classifier then uses (at 815) the retrieved SCI to determinewhether service containers executing on its host computer should performthe service operations of the service chain identified by the SCI. To dothis, the service classifier in some embodiments computes a hash valuefrom the SCI and one or more other parameters (e.g., source IP address,source port, SPI, etc.) associated with the data message or theidentified service chain, and then lookups this hash value in a hashlookup table that correlates hash ranges with different service hostcomputer identifiers. In some embodiments, when a service host computerfails, the hash range associated with that service host computer isautomatically assigned to one or more other service host computers,which allows the service classification and forwarding operations of theservice host computers to be fault tolerant.

When the service classifier determines (at 815) that its host's servicecontainers should perform the service operations of the identifiedservice chain, the service classifier performs (at 825) the operations320-335 of the process 300. On the other hand, when it determines (at815) that another host's service containers should perform the serviceoperations of the identified service chain, the service classifier handsback (at 820) the data message to virtual interface endpoint of its hostOS for forwarding to the other host computer. After 820 and 825, theprocess 800 ends.

In some embodiments, the process 800 configures one or more frontendforwarding elements (e.g., frontend load balancing TORs 615) each timethat it performs a classification operation for a new data message flow.Specifically, after performing its classification operation at 810, theprocess 800 sends an in-band or out-of-band data message (sends amessage through the data path or through a control path) that associatesthe data message's flow identifier (e.g., five or seven tupleidentifier) with the identifier of the service host computer that theprocess identifies (at 810) for performing the service chain on the datamessage's flow. A frontend forwarding element that receives such amessage creates a record in its connection tracker that associates thereceived flow identifier with the received host identifier, and thenuses this record to process subsequent data messages in the flow that itreceives after it creates the record.

FIG. 9 further illustrates the distributed service chain classificationand forwarding architecture of FIGS. 6 and 7. This architectureeliminates discrete service chain classifiers and service forwardingelements in a datacenter by replacing them with distributed serviceclassification logic and forwarding on service host computers 605, 607and 609 that execute the service containers (e.g., the servicecontainers that implement VNFs in a 5G telecommunication network). Theservice host computers are also referred to in this document as backendservers.

As shown, a server set 110 provides the same set of serviceclassification rules and service forwarding rules to each of the servicehost computers 605, 607 and 609, and configures the virtual interfaceendpoints on these computers to use these rules. By providing the sameset of service classification rules and forwarding rules to each of theservice host computers, the server set configures these host computersto implement distributed service classification and forwardingoperations, as depicted by the names distributed service classifier 955and distributed forwarding element 960 in FIG. 9. These classificationand forwarding operations are distributed because they are performedidentically on the service host computer 605, 607 and 609, based onidentical sets of classification and forwarding rules on the servicehost computers 605, 607 and 609.

In some embodiments, each service host computer (backend server) obtainsfrom the server set 110 (1) service classification rules that correlateflow identifiers with service chain identifiers, (2) a list of serviceidentifiers for each service chain identifier, (3) a list of containeridentifiers that identify the service containers that are candidates forimplementing each service identified on the list of service identifiers,(4) the MAC address of each service container identified on the list ofcontainer identifiers, (5) a list of other service host computers forreceiving redirected data message flow traffic, (6) a MAC address foreach of these other service host computers, (7) a hash function forgenerating hash values for the received data messages, and (8) a hashlookup table that associates hash values with identifiers of servicehost computers.

In some embodiments, the server set 110 collects statistics generated bythe service classifiers 955 on the service host computers. Thesestatistics are pushed (published) to the server set from the servicehost computers in some embodiments, while they are pulled (retrieved)from the service host computers by the server set 110. The server setanalyzes these statistics and based on this analysis, adds or removesservice host computers from a cluster that performs one or more servicechains. Also, in some embodiments, the server set deploys and configuresmultiple clusters of service host computers and uses different servicehost computer clusters for different sets of service chains. In somesuch embodiments, the server set can move one service chain from oneservice host computer cluster to another service host computer cluster.

Many of the above-described features and applications are implemented assoftware processes that are specified as a set of instructions recordedon a computer readable storage medium (also referred to as computerreadable medium). When these instructions are executed by one or moreprocessing unit(s) (e.g., one or more processors, cores of processors,or other processing units), they cause the processing unit(s) to performthe actions indicated in the instructions. Examples of computer readablemedia include, but are not limited to, CD-ROMs, flash drives, RAM chips,hard drives, EPROMs, etc. The computer readable media does not includecarrier waves and electronic signals passing wirelessly or over wiredconnections.

In this specification, the term “software” is meant to include firmwareresiding in read-only memory or applications stored in magnetic storage,which can be read into memory for processing by a processor. Also, insome embodiments, multiple software inventions can be implemented assub-parts of a larger program while remaining distinct softwareinventions. In some embodiments, multiple software inventions can alsobe implemented as separate programs. Finally, any combination ofseparate programs that together implement a software invention describedhere is within the scope of the invention. In some embodiments, thesoftware programs, when installed to operate on one or more electronicsystems, define one or more specific machine implementations thatexecute and perform the operations of the software programs.

FIG. 10 conceptually illustrates a computer system 1000 with which someembodiments of the invention are implemented. The computer system 1000can be used to implement any of the above-described hosts, controllers,and managers. As such, it can be used to execute any of the abovedescribed processes. This computer system includes various types ofnon-transitory machine readable media and interfaces for various othertypes of machine readable media. Computer system 1000 includes a bus1005, processing unit(s) 1010, a system memory 1025, a read-only memory1030, a permanent storage device 1035, input devices 1040, and outputdevices 1045.

The bus 1005 collectively represents all system, peripheral, and chipsetbuses that communicatively connect the numerous internal devices of thecomputer system 1000. For instance, the bus 1005 communicativelyconnects the processing unit(s) 1010 with the read-only memory 1030, thesystem memory 1025, and the permanent storage device 1035.

From these various memory units, the processing unit(s) 1010 retrieveinstructions to execute and data to process in order to execute theprocesses of the invention. The processing unit(s) may be a singleprocessor or a multi-core processor in different embodiments. Theread-only-memory (ROM) 1030 stores static data and instructions that areneeded by the processing unit(s) 1010 and other modules of the computersystem. The permanent storage device 1035, on the other hand, is aread-and-write memory device. This device is a non-volatile memory unitthat stores instructions and data even when the computer system 1000 isoff. Some embodiments of the invention use a mass-storage device (suchas a magnetic or optical disk and its corresponding disk drive) as thepermanent storage device 1035.

Other embodiments use a removable storage device (such as a floppy disk,flash drive, etc.) as the permanent storage device. Like the permanentstorage device 1035, the system memory 1025 is a read-and-write memorydevice. However, unlike storage device 1035, the system memory is avolatile read-and-write memory, such as random access memory. The systemmemory stores some of the instructions and data that the processor needsat runtime. In some embodiments, the invention's processes are stored inthe system memory 1025, the permanent storage device 1035, and/or theread-only memory 1030. From these various memory units, the processingunit(s) 1010 retrieve instructions to execute and data to process inorder to execute the processes of some embodiments.

The bus 1005 also connects to the input and output devices 1040 and1045. The input devices enable the user to communicate information andselect commands to the computer system. The input devices 1040 includealphanumeric keyboards and pointing devices (also called “cursor controldevices”). The output devices 1045 display images generated by thecomputer system. The output devices include printers and displaydevices, such as cathode ray tubes (CRT) or liquid crystal displays(LCD). Some embodiments include devices such as touchscreens thatfunction as both input and output devices.

Finally, as shown in FIG. 10, bus 1005 also couples computer system 1000to a network 1065 through a network adapter (not shown). In this manner,the computer can be a part of a network of computers (such as a localarea network (“LAN”), a wide area network (“WAN”), or an Intranet), or anetwork of networks (such as the Internet). Any or all components ofcomputer system 1000 may be used in conjunction with the invention.

Some embodiments include electronic components, such as microprocessors,storage and memory that store computer program instructions in amachine-readable or computer-readable medium (alternatively referred toas computer-readable storage media, machine-readable media, ormachine-readable storage media). Some examples of such computer-readablemedia include RAM, ROM, read-only compact discs (CD-ROM), recordablecompact discs (CD-R), rewritable compact discs (CD-RW), read-onlydigital versatile discs (e.g., DVD-ROM, dual-layer DVD-ROM), a varietyof recordable/rewritable DVDs (e.g., DVD-RAM, DVD-RW, DVD+RW, etc.),flash memory (e.g., SD cards, mini-SD cards, micro-SD cards, etc.),magnetic and/or solid state hard drives, read-only and recordableBlu-Ray® discs, ultra-density optical discs, any other optical ormagnetic media, and floppy disks. The computer-readable media may storea computer program that is executable by at least one processing unitand includes sets of instructions for performing various operations.Examples of computer programs or computer code include machine code,such as is produced by a compiler, and files including higher-level codethat are executed by a computer, an electronic component, or amicroprocessor using an interpreter.

While the above discussion primarily refers to microprocessor ormulti-core processors that execute software, some embodiments areperformed by one or more integrated circuits, such as applicationspecific integrated circuits (ASICs) or field programmable gate arrays(FPGAs). In some embodiments, such integrated circuits executeinstructions that are stored on the circuit itself.

As used in this specification, the terms “computer”, “server”,“processor”, and “memory” all refer to electronic or other technologicaldevices. These terms exclude people or groups of people. For thepurposes of the specification, the terms “display” or “displaying” meandisplaying on an electronic device. As used in this specification, theterms “computer readable medium,” “computer readable media,” and“machine readable medium” are entirely restricted to tangible, physicalobjects that store information in a form that is readable by a computer.These terms exclude any wireless signals, wired download signals, andany other ephemeral or transitory signals.

While the invention has been described with reference to numerousspecific details, one of ordinary skill in the art will recognize thatthe invention can be embodied in other specific forms without departingfrom the spirit of the invention. For instance, instead of selectingservice containers to implement a service path, the service classifierof some embodiments selects service virtual machines to implement theservice path. Thus, one of ordinary skill in the art would understandthat the invention is not to be limited by the foregoing illustrativedetails, but rather is to be defined by the appended claims.

1. A method of performing services on data messages, the methodcomprising: at a first host the executes a plurality of service machinesfor performing services: receiving a first data message; based on a setof attributes of the first data message, performing a first serviceclassification operation to identify a first set of services to performon the data message; based on an identifier for the first set ofservices, determining that a set of service machines executing on asecond host has to perform the first set of services on the first datamessage; forwarding the first data message to the second host.
 2. Themethod of claim 1 further comprising: at the first host: receiving asecond data message; based on a set of attributes of the second datamessage, performing a second service classification operation toidentify a second set of services to perform on the second data message;based on an identifier for the second set of services, determining thata set of service machines executing on the first host has to perform thesecond set of services on the second data message; sequentiallyforwarding the second data message to each service machine in the set ofservice machines on the first host that has to perform a service in thesecond set of services on the second data message.
 3. The method ofclaim 2, wherein forwarding the first data message comprises using MACredirect to forward the first data message to the second host.
 4. Themethod of claim 3, wherein sequentially forwarding the second datamessage comprises using MAC redirect to forward the second data messageto the different service machines on the first host.
 5. The method ofclaim 2, wherein a front end forwarding element forwards the first andsecond data messages to the first host.
 6. The method of claim 5,wherein the front end forwarding element forwarding other data messagesto the second host and the second host (i) performs serviceclassification to identify other sets of services to perform on theother data messages and (ii) based on identifiers for the otheridentified sets of services, either has its service machines perform theidentified sets of services or forwards the data messages to the firsthost to have its service machines perform the identified sets ofservices.
 7. The method of claim 1, wherein performing the firstclassification operation comprises: comparing the set of attributes ofthe first data message with a set of match criteria of one or moreservice chain specifying rules to identify a service-chain specifyingrule with a set of match criteria that matches the attribute set; uponidentifying a matching service-chain specifying rule, using a servicechain identifier specified by the matching rule to identify the firstset of services to perform on the first data message.
 8. The method ofclaim 1 further comprising obtaining the service-chain specifying rulesfrom a set of one or more servers along with a definition for theservice chains specified by the rules.
 9. The method of claim 8, whereineach service chain is defined by reference to a list of services thatare to be performed in a particular order; for each of a plurality ofservices that are in at least one service list, at least two servicemachines execute on the host to perform the service.
 10. The method ofclaim 8 further comprising obtaining a network address of the secondhost from the server set, in order to use to forward data messages tothe second host.
 11. The method of claim 1, wherein the identifier is aservice chain identifier, the method further comprises generating a hashvalue from the service chain identifier and associating the generatedhash value with an identifier for the second host in a lookup table todetermine that the set of service machines on the second host machinehas to process the first data message.
 12. The method of claim 1,wherein generating the hash value comprises generating the hash valuefurther from a source network address of the first data message.
 13. Themethod of claim 1, wherein the identifier is a service path identifier,the method further comprises generating a hash value from the servicepath identifier and associating the generated hash value with anidentifier for the second host in a lookup table to determine that theset of service machines on the second host machine has to process thefirst data message.
 14. The method of claim 1, wherein the machinescomprise containers.
 15. The method of claim 14, wherein first andsecond hosts execute a Linux operating system and the classification andforwarding operations are processes defined as hooks in the networkinterface ports of the Linux operating system.
 16. A non-transitorymachine readable medium storing a program for execution by a set ofprocessing units of a first host computer that executes a plurality ofservice machines for performing services on data messages, thenon-transitory machine readable medium comprising: receiving a firstdata message; based on a set of attributes of the first data message,performing a first service classification operation to identify a firstset of services to perform on the data message; based on an identifierfor the first set of services, determining that a set of servicemachines executing on a second host has to perform the first set ofservices on the first data message; forwarding the first data message tothe second host.
 17. The non-transitory machine readable medium of claim1, wherein the program further comprises sets of instructions for:receiving a second data message; based on a set of attributes of thesecond data message, performing a second service classificationoperation to identify a second set of services to perform on the seconddata message; based on an identifier for the second set of services,determining that a set of service machines executing on the first hosthas to perform the second set of services on the second data message;forwarding the second data message to each service machine in the set ofservice machines on the first host that has to perform a service in thesecond set of services on the second data message.
 18. Thenon-transitory machine readable medium of claim 17, wherein forwardingthe first data message comprises using MAC redirect to forward the firstdata message to the second host.
 19. The non-transitory machine readablemedium of claim 18, wherein forwarding the second data message comprisesusing MAC redirect to forward the second data message to the differentservice machines on the first host.
 20. The non-transitory machinereadable medium of claim 17, wherein a front end forwarding elementforwards the first and second data messages to the first host.